package com.company;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @author 关敬元
 * @Description
 * @date 2019/11/28
 */
public class Demo {
    public static void main(String[] args) {
        Map countries = new HashMap();  //创建Map的子类HashMap（父类引用子类对象）
        countries.put("China","中国");
        countries.put("USA","美国");
        countries.put("Japan","日本");
        countries.put("France","法国");

        //获取集合中存储元素的个数
        System.out.println(countries.size()); //打印的是键值对的对数

        //获取集合中特定的key对应的value--Object返回值类型，需要强制数据类型转换
        String country=(String)countries.get("China");
        System.out.println(country);

        //获取结合中特定的key对应的value，如果找不到则返回null
        String country2=(String)countries.get("Australia");
        System.out.println(country2);

        //判断集合中是否存在摸一个国家
        System.out.println("是否存China国家："+countries.containsKey("China"));//返回值是boolean
        System.out.println("是否存在Australia国家："+countries.containsKey("Australia"));

        //删除某个特定key对应的键值对
        System.out.println("是否存在USA国家："+countries.containsKey("USA"));
        countries.remove("USA");//删除对应的键值对
        System.out.println("是否存在USA国家："+countries.containsKey("USA"));
        System.out.println(countries.size());

        //获取键的集合，值的集合，键值对的集合
        System.out.println(countries.keySet());//键的集合
        System.out.println(countries.values());//值的集合
        System.out.println(countries);//键值对的集合

        //遍历Map 思路一：遍历key(Set),通过key->value
        //方法一：增强型for遍历key(Set)
        System.out.println("-------------");
        Set keys =countries.keySet();//获取到了Map中的所有key
        for (Object obj:keys){
            String key = (String)obj;//获取到了Map中的每一个key
            String value = (String)countries.get(key);//根据Map中的每个key去获取对应的value
            System.out.println(key+"--"+value);
        }
        //方法一：迭代器Iterator遍历key的集合（Set）
        System.out.println("-------------");
        Iterator iterator=keys.iterator();
        while (iterator.hasNext()){
            String key=(String) iterator.next();//获取到了Map中的每一个Key
            String value=(String)countries.get(key);//根据Map中的每个key去获取对应的value
            System.out.println(key+"--"+value);
        }

        //遍历Map 思路二：获取Map中的所有键值对，然后在键值对中分别获取key和value
        System.out.println("-------------");
        Set set=countries.entrySet();//获取Map中的键值对
        //遍历键值对的集合，把每个键值对(obj)--Map.Entry（键值对的类型）拿出来
        for (Object obj:set){
            Map.Entry me = (Map.Entry)obj;  //me代表每一对键值对
            String key=(String) me.getKey();//获取键值对中的键
            String value=(String)me.getValue();//获取键值对中的值
            System.out.println(key+"--"+value);
        }


    }
}
